home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
script.lzh
/
script_0.4
/
example
/
caller.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-12-17
|
3KB
|
136 lines
/*
script.library
client example
*/
#include <string.h>
#include <stdlib.h>
#include <rexx/rxslib.h>
#include <rexx/storage.h>
#include <proto/rexxsyslib.h>
#include <proto/exec.h>
#include <proto/dos.h>
#if defined (__SASC)
#include "/script.h"
#include "/script_pragmas.h"
#elif defined (__GNUC__)
#include "../script_inline.h"
#endif
#include "example.h"
#if defined (__GNUC__)
#define RXSLIB struct RxsLib
#elif defined (__SASC)
#define RXSLIB struct Library
#endif
struct Library *ScriptBase = NULL;
RXSLIB *RexxSysBase = NULL;
struct RexxMsg *RexxMesg = NULL;
struct MsgPort *RexxPort = NULL;
struct ScriptContext *ScriptC;
int
init (void)
{
if (!(RexxSysBase = (RXSLIB *) OpenLibrary ("rexxsyslib.library", 36)))
return 0;
if (!(ScriptBase = OpenLibrary ("script.library", 0)))
return 0;
if (!(RexxPort = CreateMsgPort ()))
return 0;
if (!(RexxMesg = CreateRexxMsg (RexxPort, NULL, NULL)))
return 0;
if (!(ScriptC = Script_AllocContext ()))
return 0;
Script_SetMsgContext (RexxMesg, ScriptC);
return 1;
}
void
clear_rexx_result (void)
{
if (RexxMesg -> rm_Result2) /* I guess this is correct :-) */
{
DeleteArgstring ((UBYTE *) RexxMesg -> rm_Result2);
RexxMesg -> rm_Result2 = 0;
}
}
void
cleanup (void)
{
clear_rexx_result ();
if (ScriptC)
Script_FreeContext (ScriptC);
if (RexxMesg)
DeleteRexxMsg (RexxMesg);
if (RexxPort)
DeleteMsgPort (RexxPort);
if (RexxSysBase)
CloseLibrary ((struct Library *) RexxSysBase);
if (ScriptBase)
CloseLibrary (ScriptBase);
}
int
main (int argc, char *argv[])
{
char *port_name = PORT_NAME,
*func_name = FUNC_NAME,
*variable_name = VAR_NAME,
*variable_value = VAR_VALUE;
struct MsgPort *port;
atexit (cleanup);
init ();
if (argc >= 2)
port_name = argv[1];
if (argc >= 3)
func_name = argv[2];
if (argc >= 4)
variable_name = argv[3];
if (argc >= 5)
variable_value = argv[4];
Script_SetStringVar (ScriptC, variable_name, variable_value);
if (!(RexxMesg -> rm_Args[0] = CreateArgstring (func_name, strlen (func_name))))
return NULL;
RexxMesg -> rm_Node.mn_Node.ln_Type = NT_MESSAGE;
RexxMesg -> rm_Node.mn_Length = sizeof (struct RexxMsg);
RexxMesg -> rm_Action = RXFUNC | RXFF_RESULT;
RexxMesg -> rm_Node.mn_ReplyPort = RexxPort;
Forbid ();
if (!(port = FindPort (port_name)))
{
Permit ();
PutStr ("Port \"");
PutStr (port_name);
PutStr ("\" not found.\n");
return NULL;
}
PutMsg (port, (struct Message *) RexxMesg);
Permit ();
do
WaitPort (RexxPort);
while (GetMsg (RexxPort) != (struct Message *) RexxMesg);
Script_GetStringVar (ScriptC, variable_name, &variable_value);
PutStr ("Returned value for: \"");
PutStr (variable_name);
PutStr ("\" is \"");
PutStr (variable_value);
PutStr ("\".\n");
ClearRexxMsg (RexxMesg, 1); /* doesn't clear rm_Result2 */
return 0;
}